import { request, API_BASE_URL } from '@/utils/http';

// 流程查询接口响应类型
export interface FlowQueryResponse {
  msg: string
  code: number
  data: {
    firstApprover: {
      name: string
      id: number
      url: string
    }
    secondApprover: {
      name: string
      id: number
      url: string
    }
    thirdApprover: {
      name: string
      id: number
      url: string
    }
  }
}

// 新增合同接口参数类型
export interface AddContractParams {
  name: string // 合同名称
  no: string // 合同编号
  amountType: string // 金额类型
  contractTermType: string // 合同期限类型
  contractNote: string // 合同说明
  ourEntityName: string // 我方主体名称
  ourCharge: string // 我方负责人
  otherEntityName: string // 对方主体名称
  otherCharge: string // 对方负责人
  signingMethod: string // 签署方式
  signTime: string // 签署日期
  sealType: string // 印章类型
}

// 新增合同接口响应类型
export interface AddContractResponse {
  msg: string
  code: number
  data?: {
    id: string // 合同ID
    type: string // 类型标识
  }
}

/**
 * 新增合同
 * @param params 合同参数
 * @returns Promise<AddContractResponse>
 */
export const addContract = (params: AddContractParams): Promise<AddContractResponse> => {
  return request(`${API_BASE_URL}/OA/contract/addContract`, {
    method: 'POST',
    data: params,
  })
}

/**
 * 查询流程
 * @returns Promise<FlowQueryResponse>
 */
export const queryFlow = (): Promise<FlowQueryResponse> => {
  return request(`${API_BASE_URL}/OA/query/flow`, {
    method: 'POST',
    data: {},
  })
}

// 付款申请接口参数类型
export interface AddPayParams {
  payRemark: string // 付款备注
  payAmount: number // 付款金额
  payDate: string // 付款日期
  payObject: string // 付款对象
  // 新增：附件URL字符串，保持与报销提交一致（逗号分隔）
  attachmentUrl?: string
}

// 付款申请接口响应类型
export interface AddPayResponse {
  msg: string
  code: number
  data?: {
    id: string // 付款申请ID
    type: string // 类型标识
  }
}

/**
 * 新增付款申请
 * @param params 付款参数
 * @returns Promise<AddPayResponse>
 */
export const addPay = (params: AddPayParams): Promise<AddPayResponse> => {
  return request(`${API_BASE_URL}/OA/contract/addPay`, {
    method: 'POST',
    data: params,
  })
}

// 撤销合同接口参数类型
export interface RevokeContractParams {
  id: string // 合同ID
  type: string // 操作类型
  remark?: string // 撤销原因
}

// 撤销合同接口响应类型
export interface RevokeContractResponse {
  msg: string
  code: number
}

/**
 * 撤销合同
 * @param params 撤销参数
 * @returns Promise<RevokeContractResponse>
 */
export const revokeContract = (params: RevokeContractParams): Promise<RevokeContractResponse> => {
  return request(`${API_BASE_URL}/OA/contract/cancelContract`, {
    method: 'POST',
    data: params,
  })
}

/**
 * 获取用户头像
 * @param url 头像URL
 * @returns Promise<Blob>
 */
export const getUserPicture = async (url: string): Promise<Blob> => {
  const response = await request(`${API_BASE_URL}/OA/user/get/picture?path=${encodeURIComponent(url)}`, {
    method: 'GET',
    responseType: 'blob', 
  });
  // 对于blob响应，拦截器返回完整response对象，需要提取data
  return response.data;
}
